/**
 * 存储工具函数
 * 提供对localStorage和sessionStorage的增强操作
 */

/**
 * 清理localStorage中的无效值
 * 检测"undefined"和"null"这样的字符串并删除
 */
export function cleanupInvalidStorageValues() {
  console.log('清理本地存储中的无效值...');
  const invalidValues = ['undefined', 'null'];
  
  // 需要检查的关键字段
  const keysToCheck = [
    'teacherId', 'studentId', 'adminId', 
    'teacherName', 'studentName', 'adminName',
    'userRole', 'token'
  ];
  
  // 检查并清理指定的键
  keysToCheck.forEach(key => {
    const value = localStorage.getItem(key);
    if (value && invalidValues.includes(value)) {
      console.warn(`检测到无效的${key}值: ${value}，正在删除...`);
      localStorage.removeItem(key);
    }
  });
  
  console.log('本地存储清理完成');
}

/**
 * 安全地获取localStorage中的值
 * 避免返回字符串"undefined"或"null"
 */
export function safeGetItem(key) {
  const value = localStorage.getItem(key);
  
  if (!value) return null;
  if (value === 'undefined' || value === 'null') {
    // 自动清除无效值
    localStorage.removeItem(key);
    return null;
  }
  
  return value;
}

/**
 * 安全地设置localStorage中的值
 * 避免设置undefined或null值
 */
export function safeSetItem(key, value) {
  if (value === undefined || value === null) {
    console.warn(`尝试为${key}设置无效值: ${value}，已阻止`);
    return false;
  }
  
  localStorage.setItem(key, value);
  return true;
}

/**
 * 登录成功后初始化存储
 */
export function initializeStorageAfterLogin(userData, userRole) {
  // 清理之前可能存在的无效值
  cleanupInvalidStorageValues();
  
  // 设置基本信息
  safeSetItem('userRole', userRole.toString());
  safeSetItem('token', userData.token);
  
  // 根据用户角色设置特定信息
  if (userRole === 1) { // 教师
    safeSetItem('teacherId', userData.user.teacherId);
    safeSetItem('teacherName', userData.user.name);
  } else if (userRole === 2) { // 学生 
    safeSetItem('studentId', userData.user.userId);
    safeSetItem('studentName', userData.user.name);
  } else if (userRole === 3) { // 管理员
    safeSetItem('adminId', userData.user.userId);
    safeSetItem('adminName', userData.user.name);
  }
  
  console.log('登录信息已安全存储');
}

/**
 * 登出时清除存储
 */
export function clearStorageOnLogout() {
  const keysToRemove = [
    'teacherId', 'studentId', 'adminId', 
    'teacherName', 'studentName', 'adminName',
    'userRole', 'token', 'tokenExpireTime'
  ];
  
  keysToRemove.forEach(key => {
    localStorage.removeItem(key);
  });
  
  console.log('登出清理完成');
} 